#include "tabwidgetframe.h"
#include "dataspecification.h"
#include "infoprint/infoprint.h"
#include "tabframe/fileinfo/fileinfotab.h"
#include "mapinfo/concretemapinfo/concretemapinfo.h"

void TabWidgetFrame::setFixedSize(const QSize &size)
{
    m_tabWidget->setFixedSize(size);
}

void TabWidgetFrame::setFixedSize(const int &width, const int &height)
{
    m_tabWidget->setFixedSize(width,height);
}

TabWidgetFrame::TabWidgetFrame(QWidget *parent)
    : QWidget{parent}
    ,m_pLayout{new QVBoxLayout(this)}
    ,m_tabWidget{new QTabWidget(this)}
{
    setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);
    InitTabWidget();
    m_pLayout->addWidget(m_tabWidget);
    
    // 使用新的工厂模式
    abstractMapInfo = new ConcreteMapInfo();
    setLayout(m_pLayout);
}

void TabWidgetFrame::getCloseRequested(int value)
{
    m_tabWidget->removeTab(value);
}

void TabWidgetFrame::getBarClicked(int value)
{
    ErrorLogPrint("I Love You");
    //m_tabWidget->tabBarClicked(value);
}

void TabWidgetFrame::getCurrChanged(int value)
{
    //m_tabWidget->currentChanged(value);
}

void TabWidgetFrame::getBarDoubleClicked(int value)
{
    //m_tabWidget->tabBarDoubleClicked(value);
}

void TabWidgetFrame::InitTabWidget()
{
    m_tabWidget->setStyleSheet("#tabWidget{border:2px solid rgb(45,226,42);"
                               "border-top-left-radius: 5px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 5px;}");

    //设置页面名字的位置 North, South, West, East
    m_tabWidget->setTabPosition(QTabWidget::North);

    //设置页面关闭按钮。
    m_tabWidget->setTabsClosable(true);

    connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(getCloseRequested(int)));
    connect(m_tabWidget, SIGNAL(tabBarClicked(int)), SLOT(getBarClicked(int)));
    connect(m_tabWidget, SIGNAL(currentChanged(int)), SLOT(getCurrChanged(int)));
    connect(m_tabWidget, SIGNAL(tabBarDoubleClicked(int)), SLOT(getBarDoubleClicked(int)));
}

void TabWidgetFrame::setTabHeadChart(const DataSpecificationGW::SpectrumDataFileHead &dataFileHead)
{
    FileInfoTab* fileInfo = new FileInfoTab;

    // 设置文件长度，参数 length 为文件长度值
    fileInfo->setFileLen(dataFileHead.iFileLength);

    // 设置规范版本号
    // 参数 v1: 主版本号
    // 参数 v2: 次版本号
    // 参数 v3: 修订版本号
    // 参数 v4: 编译版本号
    fileInfo->setVersion(dataFileHead.dataFileVersion);

    // 设置文件生成时间
    // 参数 date: 文件生成时间的字符串表示，格式为 "YYYYMMDDhhmmssfff"
    fileInfo->setCreateDate(dataFileHead.qstrGenerationTime);

    // 设置站点名称
    // 参数 name: 站点名称的字符串
    fileInfo->setStationName(dataFileHead.qstrStationName);

    // 设置站点编码
    // 参数 num: 站点编码值
    fileInfo->setStationNum(dataFileHead.qstrStationCode);

    // 设置天气
    // 参数 type: 天气类型的整数值
    fileInfo->setWeather(dataFileHead.eWeather);

    // 设置温度
    // 参数 temperature: 温度的浮点数值
    fileInfo->setTemperature(dataFileHead.fTemperature);

    // 设置湿度
    // 参数 humidity: 湿度的整数值
    fileInfo->setHumidity(dataFileHead.cHumidity);

    // 设置仪器厂家
    // 参数 deviceCompany: 仪器厂家的字符串
    fileInfo->setDeviceCompany(dataFileHead.qstrInstrumentManufacturer);

    // 设置仪器型号
    // 参数 deviceModel: 仪器型号的字符串
    fileInfo->setDeviceModel(dataFileHead.qstrInstrumentModel);

    // 设置仪器版本号
    // 参数 v1: 主版本号
    // 参数 v2: 次版本号
    // 参数 v3: 修订版本号
    // 参数 v4: 编译版本号
    fileInfo->setDeviceVersion(dataFileHead.qstrInstrumentVersion);

    // 设置仪器序列号
    // 参数 serialNumber: 仪器序列号的字符串
    fileInfo->setSerialNumber(dataFileHead.qstrInstrumentSerialNumber);

    // 设置系统频率
    // 参数 frequency: 系统频率的整数值
    fileInfo->setFrequency(dataFileHead.fSystemFrequency);

    // 设置图谱数量 N
    // 参数 chatNum: 图谱数量的整数值
    fileInfo->setChatNumber(dataFileHead.sSpectrumCount);

    // 设置经度
    // 参数 longitude: 经度值
    fileInfo->setLongitude(36.9);

    // 设置纬度
    // 参数 latitude: 纬度值
    fileInfo->setLatitude(32.5);

    // 设置海拔
    // 参数 altitude: 海拔值
    fileInfo->setAltitude(19145);

    m_tabWidget->addTab(fileInfo, QObject::tr("文件信息"));

    m_tabWidget->setTabEnabled(0, true);
}

void TabWidgetFrame::setSpectrum(int no, DataSpecificationGW::Spectrum* spectrum)
{
    if (!spectrum) {
        WarningLogPrint(QString("第%1个图谱数据为空").arg(no+1));
        return;
    }
    
    // 使用工厂创建图谱界面
    MapInfoTab* tabPage = abstractMapInfo->createMapInfoTab(spectrum);
    
    if (!tabPage) {
        WarningLogPrint(QString("不支持第%1个图谱类型").arg(no+1));
        return;
    }
    
    // 添加到选项卡
    m_tabWidget->addTab(tabPage, QObject::tr("图谱%1信息").arg(no+1));
    m_tabWidget->setTabEnabled(no+1, true);
}
